/*
 * @Author: ljkt
 * @Version: 1.0
 * @Date: 2022-01-06 15:57:15
 * @LastEditors: ljkt
 * @LastEditTime: 2025-09-22 17:09:39
 * @Description:
 */
#include "./Common_Include.h"
#include "./Drv/Drv_Uart.h"
#include "./ljt/Common_Func.h" //DXY

//  Ram uart_packet_t gAPP_tx_bug;
Ram uart_packet_rx gAPP_rx_buf;
Ram uint key_value_anjian;
static Ram unsigned char tx_key_pcb = 0, tx_power_pcb = 0;
/**
 * @brief 初始化通信模块
 *
 * 该函数用于初始化通信模块。通过调用memset函数，将全局变量gApp_Com的所有字节设置为0，从而实现初始化。
 */
void App_Com_Init(void)
{
	// 使用memset函数将gAPP_tx_bug、gAPP_rx_buf结构体的所有字节设置为0，实现初始化
	//	memset(&gAPP_tx_bug, 0, sizeof(uart_packet_t));
	memset(&gAPP_rx_buf, 0, sizeof(uart_packet_t));
}
/**

/**
 * @brief 发送数据函数
 *
 * 该函数用于发送数据。具体的发送逻辑需要根据实际情况实现。
 */
Ram uchar TxPowerFlag = 0;
void Com_Send_uart0(void) // DXY  uart0数据装载
{
	//	static unsigned char tick = 0;
	uart_packet_t *p = gDrvUartx[Com_uart0_TopowerPCB].TxAddr; // 串口发送数组 用局部变量节省资源，？？赋值位置和方向是否有问题
	// if (Drv_Autoload_Ntick_u8(&tick, 30ul))
	if (tx_power_pcb)
	{
		if (gDrvUartx[Com_uart0_TopowerPCB].TxCnt < 4)
		{
			Drv_Uartx_Init();
		}
		tx_power_pcb = 0;
		p->Head = Tx_head;
		p->key_low_Byte = (uchar)(key_value);
		p->key_high_Byte = (uchar)(key_value >> 8);
		p->Ukey_low_Byte = ~(uchar)(key_value);
		p->Ukey_high_Byte = ~(uchar)(key_value >> 8);
		p->yuliu = Tx_yuliu;												   // 预留
		p->sum = (uchar)CheckSum_u16((uchar *)(p), sizeof(uart_packet_t) - 1); //
		Drv_Uartx_Tx_Start(Com_uart0_TopowerPCB, sizeof(uart_packet_t));
	}
}

/**
 * @brief 接收数据函数
 *
 * 该函数用于接收数据。具体的接收逻辑需要根据实际情况实现。
 */
void Com_Recv_uart0(void) // DXY
{
	uchar sum;
	uart_packet_rx *p = gDrvUartx[Com_uart0_TopowerPCB].RxAddr; //???怎么接受到BUF的数据,数据怎么对齐的
	s_drv_uartx_t *obj = &gDrvUartx[Com_uart0_TopowerPCB];
	// memset(&gAPP_rx_buf, 0, sizeof(uart_packet_t));
	if (obj->RxIsBusy == REF_FREE)
	{
		if (p->Head == Rx_head)
		{
			sum = gDrvUartx[Com_uart0_TopowerPCB].RxAddr[jiaoyanma];
			if (sum == (uchar)CheckSum_u16(gDrvUartx[Com_uart0_TopowerPCB].RxAddr, sizeof(uart_packet_rx) - 1))
			{
				gAPP_rx_buf.Dig8one_1 = p->Dig8one_1;
				gAPP_rx_buf.Dig8one_2 = p->Dig8one_2;
				gAPP_rx_buf.Dig8two_1 = p->Dig8two_1;
				gAPP_rx_buf.Dig8two_2 = p->Dig8two_2;
				gAPP_rx_buf.Dig8two_3 = p->Dig8two_3;
				gAPP_rx_buf.LV_led = p->LV_led;
				gAPP_rx_buf.key_led = p->key_led;
				gAPP_rx_buf.Status_led = p->Status_led;
				gAPP_rx_buf.Huidu_pwm = p->Huidu_pwm;
				gAPP_rx_buf.beep_data = p->beep_data;
				gAPP_rx_buf.beep_on_time = p->beep_on_time;
				gAPP_rx_buf.beep_off_time = p->beep_off_time;
				tx_key_pcb = 1;
				if (p->beep_data & 0xf0)
				{
					DEV_BUZ_SET_CMD(((0xf0 & p->beep_data) >> 4), p->beep_on_time * 10, p->beep_off_time * 10);
				}
			}
		}
		// Dev_IoPrint_Hex(gDrvUartx[Com_uart0_TopowerPCB].RxAddr, gDrvUartx[Com_uart0_TopowerPCB].RxCnt);
		// Dev_IoPrint_Str_Buf2HexStr("uart0", gDrvUartx[Com_uart0_TopowerPCB].RxAddr, gDrvUartx[Com_uart0_TopowerPCB].RxCnt);
		Drv_Uartx_Rx_Start(Com_uart0_TopowerPCB); //
	}
}

/**
 * @brief 发送数据函数
 *
 * 该函数用于发送数据。具体的发送逻辑需要根据实际情况实现。
 */
void Com_Send_uart1(void) // DXY  uart0数据装载
{
	//	static unsigned char tick = 0;
	uart_packet_rx *p = gDrvUartx[Com_uart1_TouchPCB].TxAddr; // 串口发送数组 用局部变量节省资源，？？赋值位置和方向是否有问题

	// if (Drv_Autoload_Ntick_u8(&tick, 30ul))

	if (tx_key_pcb)
	{
		if (gDrvUartx[Com_uart1_TouchPCB].TxCnt < 4)
		{
			Drv_Uartx_Init();
		}
		tx_key_pcb = 0;
		p->Head = TX_TOUCH_PCB_HEAD;
		p->Dig8one_1 = 0x02; // gAPP_rx_buf.Dig8one_1;
		p->Dig8one_2 = gAPP_rx_buf.Dig8one_2;
		p->Dig8two_1 = gAPP_rx_buf.Dig8two_1;
		p->Dig8two_2 = gAPP_rx_buf.Dig8two_2;
		p->Dig8two_3 = gAPP_rx_buf.Dig8two_3;
		p->LV_led = gAPP_rx_buf.LV_led;
		p->key_led = gAPP_rx_buf.key_led;
		p->Status_led = gAPP_rx_buf.Status_led;
		p->Huidu_pwm = gAPP_rx_buf.Huidu_pwm;
		p->beep_data = gAPP_rx_buf.beep_data;
		p->beep_on_time = gAPP_rx_buf.beep_on_time;
		p->beep_off_time = gAPP_rx_buf.beep_off_time;

		// test
		// p->Head = Rx_head;
		// p->Dig8one_1 = 0xFF; // gAPP_rx_buf.Dig8one_1;
		// p->Dig8one_2 = 0xFF;
		// p->Dig8two_1 = 0xFF;
		// p->Dig8two_2 = 0xFF;
		// p->Dig8two_3 = 0xFF;
		// p->LV_led = 0x07;
		// p->key_led = 0xFF;
		// p->Status_led = 0xFF;
		// p->Huidu_pwm = 0x0F;
		// p->beep_data = 0xFF;
		// p->beep_on_time = 0xFF;
		// p->beep_off_time =0xFF;

		p->sum = (uchar)CheckSum_u16((uchar *)(p), sizeof(uart_packet_rx) - 1); //
		Drv_Uartx_Tx_Start(Com_uart1_TouchPCB, sizeof(uart_packet_rx));
	}
}

/**
 * @brief 接收数据函数
 *
 * 该函数用于接收数据。具体的接收逻辑需要根据实际情况实现。
 */
void Com_Recv_uart1(void) // DXY
{
	uchar sum;
	uart_packet_t *p = gDrvUartx[Com_uart1_TouchPCB].RxAddr; //???怎么接受到BUF的数据,数据怎么对齐的
	s_drv_uartx_t *obj = &gDrvUartx[Com_uart1_TouchPCB];
	if (obj->RxIsBusy == REF_FREE)
	{
		if (p->Head == RX_TOUCH_PCB_HEAD)
		{
			sum = (uchar)CheckSum_u16((uchar *)(p), sizeof(uart_packet_t) - 1);
			if (p->sum == sum)
			{
				key_value_anjian = (uint)p->key_low_Byte;
				key_value_anjian |= (uint)(p->key_high_Byte << 8);
				tx_power_pcb = 1;
#ifdef DEBUG_KEYCMD
				if (key_value_anjian)
				{
					DEV_BUZ_SET_CMD(1, 1000, 50);
				}
#endif
			}
			// Dev_IoPrint_Str_Buf2HexStr("uart1", gDrvUartx[Com_uart1_TouchPCB].RxAddr, gDrvUartx[Com_uart1_TouchPCB].RxCnt);
		}
		// Dev_IoPrint_Str_Buf2HexStr("uart1", gDrvUartx[Com_uart1_TouchPCB].RxAddr, gDrvUartx[Com_uart1_TouchPCB].RxCnt);
		Drv_Uartx_Rx_Start(Com_uart1_TouchPCB); //
	}
}

/**
 * @brief 扫描通信模块
 *
 * 该函数用于扫描通信模块。通过调用Com_Send和Com_Recv函数，实现数据的发送和接收。
 */
void App_Com_Scan(void)
{
	Com_Send_uart0();
	Com_Recv_uart0();
	Com_Send_uart1();
	Com_Recv_uart1();
}
